package com.inews.base.utils;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.lang.time.DateUtils;
import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import com.inews.business.service.TeacherServiceImpl;
import com.inews.business.vo.SalaryChangeVo;

public class ExcelUtil {

public static List<String> TrainValue;
private static Logger logger = Logger.getLogger(ExcelUtil.class);
	static {
		TrainValue=new ArrayList<String>();		
		TrainValue.add("流水号:sn:long");
		TrainValue.add("部门:department");
		TrainValue.add("工号:staffId");
		TrainValue.add("教师姓名:staffName");
	    TrainValue.add("年龄:age");
		TrainValue.add("培训项目:trainName");
		TrainValue.add("培训结构名称:trainInsName");
		TrainValue.add("培训性质:trainProp");		
		TrainValue.add("开始培训时间:trainStartDate");
		TrainValue.add("结束培训时间:trainEndDate");
		TrainValue.add("培训年度:trainYear");
		TrainValue.add("备注:note");
	
	}

	
public static List<String> PracticeValue;
	
	static {
		PracticeValue=new ArrayList<String>();		
		PracticeValue.add("流水号:sn:long");
		PracticeValue.add("部门:department");
		PracticeValue.add("工号:staffId");
		PracticeValue.add("教师姓名:staffName");
		PracticeValue.add("年龄:age");
		PracticeValue.add("开始时间:practiceStartDate");
		PracticeValue.add("结束时间:practiceEndDate");
		PracticeValue.add("工作日天数:workDay");		
		PracticeValue.add("非工作日天数:nonWorkDay");	
		PracticeValue.add("累计天数:totalDay");	
		PracticeValue.add("实践内容:practiceContent");
		PracticeValue.add("实践成果:practiceResult");
		PracticeValue.add("备注:note");
	
	}
	
	
public static List<String> TeacherValue;
	
static {
	TeacherValue=new ArrayList<String>();
	
	TeacherValue.add("部门:department");	
	TeacherValue.add("工号:staffId");

	// 名称
	TeacherValue.add("姓名:staffName");		
	// 身份证号
	TeacherValue.add("身份证号:idCardNo");		
	// 性别
	TeacherValue.add("性别:sex");		
	// 民族
	TeacherValue.add("民族:nation");		
	// 出生日期		
	TeacherValue.add("出生日期:birthdate");		
	// 年龄
	TeacherValue.add("年龄:age");		
	// 籍贯
	TeacherValue.add("籍贯:birthplace");		
	// 政治面貌
	TeacherValue.add("政治面貌:political");		
	// 电子邮件
	
	TeacherValue.add("电子邮件:email");
	// 通讯地址
	TeacherValue.add("通讯地址:contact");
	// 联系电话
	TeacherValue.add("联系电话:phone");
	// 家庭住址
	TeacherValue.add("家庭住址:address");	
	// 教师性质
	TeacherValue.add("教师性质:category");		
	// 人员性质
	TeacherValue.add("人员性质:staffQual");		
	// 人员编制
	TeacherValue.add("人员编制:staffOrg");		
	// 参加工作时间
	TeacherValue.add("参加工作时间:intoWorkDate");		
	// 进入本单位时间
	TeacherValue.add("进入本单位时间:intoDepDate");		
	// 工作年限 扣除年限
					
	TeacherValue.add("工作年限(扣除年限):workYearDedu");		 
	// 实际工作年限
		TeacherValue.add("实际工作年限:workYearReal");		
	// 工作年限 (06工改计算口径)
	TeacherValue.add("工作年限 (06工改计算口径):workYear");		
	// 毕业学校
	TeacherValue.add("毕业学校:graduate");				
	// 所学专业
	TeacherValue.add("所学专业:major");				
	// 最高学历;
	TeacherValue.add("最高学历:education");				
	// 学位
	TeacherValue.add("学位:degree");
	// 任教学科
	TeacherValue.add("任教学科:subject");		
	// 工资标准类型
	TeacherValue.add("工资标准类型:payType");		
	// 工资标准等级
	TeacherValue.add("工资标准等级:payGrade");	
	// 专业技术职务 任职资格
	TeacherValue.add("专业技术职务(任职资格):jobqua");		
	// 专业技术职务 任职资格取得时间
	TeacherValue.add("专业技术职务(任职资格取得时间):jobquaDate");				
	// 现聘任岗位名称
	TeacherValue.add("现聘任岗位名称:posName");			
	// 现聘任职务岗位等级
	TeacherValue.add("现聘任职务岗位等级:posGrade");				
	// 现聘岗位时间
	TeacherValue.add("现聘岗位时间:posDate");				
	// 任现职年限 扣除年限
	TeacherValue.add("任现职年限(扣除年限):serviceYearDedu");			
	// 实际任现职年限
	TeacherValue.add("实际任现职年限:serviceYearReal");			
	// 任现职年限 (06工改计算口径)
	TeacherValue.add("任现职年限 (06工改计算口径):serviceYear");			
	// 职称聘任评议类别					

	TeacherValue.add("职称聘任评议类别:jobtitleSort");				
	// 职业资格证书
	TeacherValue.add("职业资格证书:jobtitleCert");				
	// 职业技术等级
	TeacherValue.add("职业技术等级:skillLevel");
	// 职业技术等级
		TeacherValue.add("最后更新时间:updateDate");
	

	TeacherValue.add("备注:note");

}


public static List<String> TeacherHisValue;

static {
	TeacherHisValue=new ArrayList<String>();
	TeacherHisValue.add("批处理日期:batchDate");
	//TeacherValue.add("部门:department");
	TeacherHisValue.add("工号:staffId");
	TeacherHisValue.add("部门:department");	
	// 名称
	TeacherHisValue.add("名称:staffName");		
	// 身份证号
	TeacherHisValue.add("身份证号:idCardNo");		
	// 性别
	TeacherHisValue.add("性别:sex");		
	// 民族
	TeacherHisValue.add("民族:nation");		
	// 出生日期		
	TeacherHisValue.add("出生日期:birthdate");		
	// 年龄
	TeacherHisValue.add("年龄:age");		
	// 籍贯
	TeacherHisValue.add("籍贯:birthplace");		
	// 政治面貌
	TeacherHisValue.add("政治面貌:political");		
	// 电子邮件
	TeacherHisValue.add("电子邮件:email");
	// 通讯地址
	TeacherHisValue.add("通讯地址:contact");
	// 联系电话
	TeacherHisValue.add("联系电话:phone");
	// 家庭住址
	TeacherHisValue.add("家庭住址:address");	
	// 教师性质
	TeacherHisValue.add("教师性质:category");		
	// 人员性质
	TeacherHisValue.add("人员性质:staffQual");		
	// 人员编制
	TeacherHisValue.add("人员编制:staffOrg");		
	// 参加工作时间
	TeacherHisValue.add("参加工作时间:intoWorkDate");		
	// 进入本单位时间
	TeacherHisValue.add("进入本单位时间:intoDepDate");		
	// 工作年限 扣除年限
	TeacherHisValue.add("工作年限(扣除年限):workYearDedu");		 
	// 实际工作年限
		TeacherHisValue.add("实际工作年限:workYearReal");		
	// 工作年限 (06工改计算口径)
	TeacherHisValue.add("工作年限 (06工改计算口径):workYear");		
	// 毕业学校
	TeacherHisValue.add("毕业学校:graduate");				
	// 所学专业
	TeacherHisValue.add("所学专业:major");				
	// 最高学历;
	TeacherHisValue.add("学历:education");				
	// 学位
	TeacherHisValue.add("学位:degree");
	// 任教学科
	TeacherHisValue.add("任教学科:subject");		
	// 工资标准类型
	TeacherHisValue.add("工资标准类型:payType");		
	// 工资标准等级
	TeacherHisValue.add("工资标准等级:payGrade");			
	// 专业技术职务 任职资格
	TeacherHisValue.add("专业技术职务(任职资格):jobqua");		
	// 专业技术职务 任职资格取得时间
	TeacherHisValue.add("专业技术职务(任职资格取得时间):jobquaDate");				
	// 现聘任岗位名称
	TeacherHisValue.add("现聘任岗位名称:posName");			
	// 现聘任职务岗位等级
	TeacherHisValue.add("现聘任职务岗位等级:posGrade");				
	// 现聘岗位时间
	TeacherHisValue.add("现聘岗位时间:posDate");				
	// 任现职年限 扣除年限
	TeacherHisValue.add("任现职年限(扣除年限):serviceYearDedu");			
	// 实际任现职年限
	TeacherHisValue.add("实际任现职年限:serviceYearReal");			
	// 任现职年限 (06工改计算口径)
	TeacherHisValue.add("任现职年限 (06工改计算口径):serviceYear");			
	// 职称聘任评议类别
	TeacherHisValue.add("职称聘任评议类别:jobtitleSort");				
	// 职业资格证书
	TeacherHisValue.add("职业资格证书:jobtitleCert");				
	// 职业技术等级
	TeacherHisValue.add("职业技术等级:skillLevel");
	TeacherHisValue.add("备注:note");

}


public static List<String> levelChangeValue;

static {
	levelChangeValue=new ArrayList<String>();
	levelChangeValue.add("流水号:sn:long");
	levelChangeValue.add("部门:department");
	levelChangeValue.add("工号:staffId");
	levelChangeValue.add("姓名:staffName");
	levelChangeValue.add("变动时间:levelChangeDate");
	levelChangeValue.add("调整前:beforeLevel");
	levelChangeValue.add("调整后:afterLevel");
	levelChangeValue.add("备注:note");

}


public static List<String> SalryChangeValue;

static {
	SalryChangeValue=new ArrayList<String>();
	SalryChangeValue.add("流水号:sn:long");
	SalryChangeValue.add("部门:department");
	SalryChangeValue.add("工号:staffId");
	SalryChangeValue.add("姓名:staffName");
	SalryChangeValue.add("工资变动内容:changeType");
	SalryChangeValue.add("工资变动时间:changeDate");
	SalryChangeValue.add("调整前:beforeSalary");
	SalryChangeValue.add("调整后:afterSalary");
	SalryChangeValue.add("备注:note");

}


	public static List<String> PostChangeValue;
	
	static {
		PostChangeValue=new ArrayList<String>();
		PostChangeValue.add("流水号:sn:long");
		PostChangeValue.add("部门:department");
		PostChangeValue.add("工号:staffId");
		PostChangeValue.add("姓名:staffName");
		PostChangeValue.add("岗位变动时间:postChangeDate");
		PostChangeValue.add("调整前:beforePost");
		PostChangeValue.add("调整后:afterPost");
		PostChangeValue.add("备注:note");
	
	}
	
	public static List<Object> ImportVo(InputStream is,List<String> keyValue,Class obj) throws Exception{
		
		List<Object> voList=new ArrayList<Object>();
		HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);
		HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(0); 
	    if(InewsUtils.isNotEmpty(hssfSheet)){
	    	//循环行Row(第一行为标题，跳过)   
	    	for(int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++){  
		        HSSFRow hssfRow = hssfSheet.getRow(rowNum);  
		        if(InewsUtils.isEmpty(hssfRow)){  
		          continue;  
		        }  
		        Object vo = obj.newInstance();
		        for(int i=0;i<keyValue.size();i++){		        	
		        
		        		String value=InewsUtils.getValue(hssfRow.getCell(i));
		        		
		        		try {
		        			if(value.equals("")){
		        				BeanUtils.setProperty(vo, keyValue.get(i).split(":")[1], null);
		        			}
		        			else if(keyValue.get(i).split(":").length>2){
		        			if(keyValue.get(i).split(":")[2].equals("long")){
		        				BeanUtils.setProperty(vo, keyValue.get(i).split(":")[1], Double.valueOf(value).longValue());
		        			}
		        		}
		        		
		        		else	if(keyValue.get(i).split(":")[1].toLowerCase().endsWith("date")){
							
								if(value!=null&&!"".equals(value)){
								String dateformat=DateFormatUtils.format(DateUtils.parseDate(value, new String[]{"yyyy-MM-dd"}),"yyyyMMdd");
						        BeanUtils.setProperty(vo, keyValue.get(i).split(":")[1], dateformat);
								}
								else BeanUtils.setProperty(vo, keyValue.get(i).split(":")[1], "");
							}
		        		else 		
						BeanUtils.setProperty(vo, keyValue.get(i).split(":")[1], value);
					} catch (Exception e) {
						logger.info("解析"+keyValue.get(i)+"的时候出错 获取的值是"+value+" 出错原因是"+e.getMessage());
						continue;
					} 
		        }
		      
		        voList.add(vo);
	    	}  
	    }
		return voList;
		
	}
	
	
	
}
